<?php
include_once '../gerenciadores/AutoloadGerenciadores.php';


class RepositorioRequisicaoMaterial{
	private static $instancia;
	
	private function __construct(){
	}
	
	public static function getInstancia(){
		if(!isset(self::$instancia)){
			$class = _CLASS_;
					self::$instancia = $class;
		}
		return self::$instancia;
	}
	
	public static function criaRequisicao(RequisicaoDeMaterial $requisicao){
		$material = $requisicao->getMaterial();
		try{
				$sql = "INSERT INTO `t_requisicao`
				(`idpessoa`, `idmaterial`, `idturma`, `data_requisicao`,
				 `hora_requisicao`, `data_aula`, `quantidade`, `turno`) VALUES ('";
				$sql = $sql.$requisicao->getInstrutor()->getIdPessoa()."', '";
				$sql = $sql.$material->getIdMaterial()."', '";
				$sql = $sql.$requisicao->getTurma()->getIdTurma()."', '";
				$sql = $sql.$requisicao->getDataRequisicao()."', '";
				$sql = $sql.$requisicao->getHoraRequisicao()."', '";
				$sql = $sql.$requisicao->getDataAula()."', '";
				$sql = $sql.$material->getQuantidade()."', '";
				$sql = $sql.$requisicao->getTurno();
				$sql = $sql."');";
				Conexao::executaSql($sql);
		}
		catch (RequisicaoMaterialCadastraException $e){
			echo $e->getMessage();
		}
		
	}
	
	public static function getRequisicao(Turma $turma, Disciplina $disciplina){
		$sql = "SELECT * FROM `t_requisicao` WHERE idturma='".$turma->getIdTurma()."' AND iddisciplina='".$disciplina->getIdDisciplina()."';";
		$tabela = Conexao::tabelaSql($sql);
		
		for($i=0; $i<count($tabela);$i++){
			$requisicao[$i] = new RequisicaoDeMaterial();
			$idInstrutor = array_column($tabela[$i],'idinstrutor');
			$idDisciplina = array_column($tabela[$i], 'iddisciplina');
			$idTurma = array_column($tabela[$i], 'idturma');
			$turno = array_column($tabela[$i], 'turno');
			$dataAula = array_column($tabela[$i], 'data_aula');
			$controle = array_column($tabela[$i], 'controle');
			$liberacao = array_column($tabela[$i], 'liberacao');
			$dataRequisicao = array_column($tabela[$i], 'data_requisicao');
			$idMaterial = array_column($tabela[$i], 'idmaterial');
			
			$requisicao[$i]->setInstrutor(RepositorioInstrutor::getInstrutor($idInstrutor));
			$requisicao[$i]->setDisciplina(RepositorioDisciplina::getDisciplina($idDisciplina));
			$requisicao[$i]->setTurma(RepositorioTurma::getTurma($idTurma));
			$requisicao[$i]->setMaterial(RepositorioMaterial::getMaterial($idMaterial));
			$requisicao[$i]->setTurno($turno);
			$requisicao[$i]->setControle($controle);
			$requisicao[$i]->setLiberacao($liberacao);
			$requisicao[$i]->setDataAula($dataAula);
			$requisicao[$i]->setDataRequisicao();
			
		}
		
		return $requisicao;
	}
	
	public static function getRequisicaoPorMaterial(Material $material){
		$sql = "SELECT * FROM `t_requisicao` WHERE idmaterial = '".$material->getIdMaterial()."' order by data_aula;";
		$tabela = Conexao::tabelaSql($sql);
		
		
		$i=0;
		foreach($tabela as $linha){
			$requisicao[$i] = new RequisicaoDeMaterial();
			$idInstrutor = $linha['idpessoa'];
			$idTurma = $linha['idturma'];
			$turno = $linha['turno'];
			$dataAula = $linha['data_aula'];
			$controle = $linha['controle'];
			$liberacao = $linha['liberacao'];
			$dataRequisicao = $linha['data_requisicao'];
			$idMaterial = $linha['idmaterial'];
			$material->setQuantidade($linha['quantidade']);
				
			$requisicao[$i]->setInstrutor(RepositorioInstrutor::getInstrutor($idInstrutor));
			$requisicao[$i]->setTurma(RepositorioTurma::getTurma($idTurma));
			$requisicao[$i]->setMaterial($material);
			$requisicao[$i]->setTurno($turno);
			$requisicao[$i]->setControle($controle);
			$requisicao[$i]->setLiberacao($liberacao);
			$requisicao[$i]->setDataAula($dataAula);
			$requisicao[$i]->setDataRequisicao($dataRequisicao);
			$i++;	
		}
	
		return $requisicao;
	}
	
	
	public static function getRequisicaoPorData($dataAula){
		
		$sql = "SELECT * FROM `t_requisicao` WHERE data_aula = '".$dataAula."' order by data_aula;";
		$tabela = Conexao::tabelaSql($sql);
		
		$i=0;
		foreach($tabela as $linha){
			$requisicao[$i] = new RequisicaoDeMaterial();
			$idInstrutor = $linha['idpessoa'];
			$idTurma = $linha['idturma'];
			$turno = $linha['turno'];
			$controle = $linha['controle'];
			$liberacao = $linha['liberacao'];
			$dataRequisicao = $linha['data_requisicao'];
			$idMaterial = $linha['idmaterial'];
			$material = RepositorioMaterial::getMaterial($linha['idmaterial']);
			$material->setQuantidade($linha['quantidade']);
			
			$requisicao[$i]->setIdRequisicao($idInstrutor.$idTurma.$idMaterial);
			$requisicao[$i]->setInstrutor(RepositorioInstrutor::getInstrutor($idInstrutor));
			$requisicao[$i]->setTurma(RepositorioTurma::getTurma($idTurma));
			$requisicao[$i]->setMaterial($material);
			$requisicao[$i]->setTurno($turno);
			$requisicao[$i]->setControle($controle);
			$requisicao[$i]->setLiberacao($liberacao);
			$requisicao[$i]->setDataAula($dataAula);
			$requisicao[$i]->setDataRequisicao($dataRequisicao);
			$i++;
		}
		return $requisicao;		
	}
	
	
	public static function atualizaRequisicao(RequisicaoDeMaterial $requisicao){
		$contador = 0;
		$dataRequisicao = self::converteData($requisicao->getDataRequisicao());
		$dataAula = self::converteData($requisicao->getDataAula());
		
		try{
			$sql = "UPDATE `t_requisicao` SET ";
			
			if(!is_null($requisicao->getLiberacao())){
				$sql = $sql."`liberacao`='".$requisicao->getLiberacao()."' ";
				$contador++;
			}
			
			
			if(!is_null($dataAula)){
				if($contador>0){
					$sql = $sql.",";
				}
				$sql = $sql."`data_aula`='".$dataAula."' ";
				$contador++;
			}
			if(!is_null($requisicao->getMaterial())){
				if($contador>0){
					$sql = $sql.",";
				}
				$material = $requisicao->getMaterial();
				$sql = $sql."`quantidade`='".$material->getQuantidade()."' ";
				$contador++;
			}
			
			if(!is_null($requisicao->getTurno())){
				if($contador>0){
					$sql = $sql.",";
				}
				$sql = $sql."`turno`='".$requisicao->getTurno()."' ";
				$contador++;
			}
			if(!is_null($requisicao->getControle())){
				if($contador>0){
					$sql = $sql.",";
				}
				$sql = $sql."`controle`='".$requisicao->getControle()."' ";
				$contador++;
			}
			
			$sql = substr($sql, 0,-1);
			
			$contador = 0;
			$sql = $sql." WHERE ";
			
			if(!is_null($requisicao->getInstrutor())){
				$instrutor = $requisicao->getInstrutor();
				$sql = $sql."`idpessoa`='".$instrutor->getIdPessoa()."' ";
				$contador++;
			}
			
			if(!is_null($requisicao->getMaterial())){
				if($contador>0){
					$sql = $sql."AND ";
				}
				$material = $requisicao->getMaterial();
				$sql = $sql."`idmaterial`='".$material->getIdMaterial()."' ";
			
			}
			if(!is_null($requisicao->getTurma())){
				if($contador>0){
					$sql = $sql."AND ";
				}
				$turma = $requisicao->getTurma();
				$sql = $sql."`idturma`='".$turma->getIdTurma()."' ";
			}
			
			if(!is_null($requisicao->getDataRequisicao())){
				if($contador>0){
					$sql = $sql."AND ";
				}
				
				$sql = $sql."`data_requisicao`='".$requisicao->getDataRequisicao()."' ;";
			}
			Conexao::executaSql($sql);
			
		}
		catch (RequisicaoMaterialAtualizaException $e){
			echo $e->getMessage();
		}
		
	}
	
	public static function deletaRequisicaoMaterial(RequisicaoDeMaterial $requisicao){
		$instrutor = $requisicao->getInstrutor();
		$material = $requisicao->getMaterial();
		$turma = $requisicao->getTurma();
		$turno = $requisicao->getTurno();
		$dataAula = $requisicao->getDataAula();
		
		try{
			if(isset($instrutor) &&  isset($material) && isset($turma) && isset($turno)){
				$sql = "DELETE FROM `t_requisicao` WHERE `idpessoa` = '".$instrutor->getIdPessoa()."'
		 	 AND `data_aula` = '".$dataAula."' AND `idmaterial`='".$material->getIdMaterial()."'
		 	 AND `idturma` = '".$turma->getIdTurma()."' AND `turno`='".$turno."';";
				
				
			Conexao::executaSql($sql);
				
			}
		}
		catch (RequisicaoMaterialDeletaException $e){
			echo $e->getMessage();
		}
		
	}
	
	public static function getQuantidadeMaterial($idMaterial, $turno, $data){
		$sql ="SELECT SUM(t_requisicao.quantidade) AS soma from t_requisicao 
		WHERE data_aula='$data' AND turno='$turno' AND idmaterial='$idMaterial'";
		$tabela = Conexao::tabelaSql($sql);
		
		$qtdMaterial = $tabela['soma'];
		
		return $qtdMaterial;
	}
	
	private static function converteData($data){
		if(!is_null($data)){
			
			$dataTab = array();
			$dataTab = split("/", $data);
			
			$data = "";
			for($i=count($dataTab)-1; $i>=0; $i--){
				$data .= $dataTab[$i];
				$data .="-";
			}
			$data =substr($data, 0, -1);
			
			return $data;
		}
		else{
			self::__autoload("DataException");
			$e = new DataException();
			echo $e->getMessage();
		}
	}
}
?>